import random as r
import time as t

rights = ["恭喜你答对了", "正确", "很好", "太厉害了"]
errors = ["很遗憾", "错误", "还差一点", "再算一下吧"]
#建立两个列表表示答对和答错，方便后续可以根据需要进行统计
right_aggremate=[]#答对练习列表
error_aggremate=[]#答错练习列表

#定义一个计算类，可对整数和小数分别进行计算
class sum_num:
    #类的初始化函数
    def __init__(self):
        self.sum_rights = 0
        self.sum_errors = 0
        self.score = 0
        self.num1=0#加数1
        self.num2=0#加数2
        self.num=1#练习次数

    #计算小数
    def add_x(self):
        print("\r请输入你将尝试的次数：", end="")
        num = int(input())#输入练习次数
        for i in range(num):
            #随机生成两个小数，设置两个小数都是两位小数
            num1 = r.uniform(10, 99)
            num2 = r.uniform(10, 99)
            sum = round(num1,2) + round(num2,2)
            #设置开始时间
            start = t.perf_counter()
            print("请输入你计算的结果：")
            print("\r{}+{}=".format(round(num1, 2), round(num2, 2)), end="")#输出表达式
            n = float(input())
            if sum == n:
                #随机输出正确的一句话
                print("计算结果：{}".format(rights[r.randint(0, len(rights) - 1)]))
                self.score = self.score + 10#计算正确，成绩加10
                #设置一个集合把练习的结果保存进去，然后添加到正确的列表
                str_aggremate = {str(round(num1, 2)) + "+" + str(round(num2, 2)) + "=" + str(n)}
                right_aggremate.append(str_aggremate)
                self.sum_rights += 1#答对得题数加1
            else:
                print("计算结果：{}".format(errors[r.randint(0, len(errors) - 1)]))
                str_list = {str(round(num1, 2)) + "+" + str(round(num2, 2)) + "=" + str(n)}#同上
                error_aggremate.append(str_list)
                self.sum_errors += 1
            print("历史记录：{}".format(right_aggremate + error_aggremate))#把正确和错误的统计集合合在一起
            print("总成绩为：{}".format(self.score))#计算总成绩
            print("答题次数：{} 答对题数：{} 答错题数：{}".format(num, self.sum_rights, self.sum_errors))
            print("剩余机会：{}".format(num-i-1))
            end = t.perf_counter()#结束时间
            print("尝试时间为：{}".format(round((end - start),2)))#时间保留两位小数
            print("-" * 20)

    #计算整数的加法
    def add_z(self):
        #随机生成两个两位整数，且两个整数的和保证为两位
        num1 = int(r.randint(10, 99))
        num2 = int(r.randint(10, 99))
        sum = num1 + num2
        if sum > 99:
            return self.add_z()
        else:
            #设置开始时间
            start = t.perf_counter()
            #输入自己的计算结果
            print("请输入你计算的结果：")
            print("\r{}+{}=".format(num1, num2), end="")
            n = int(input())
            if sum == n:
                print("计算结果：{}".format(rights[r.randint(0, len(rights) - 1)]))
                self.score = self.score + 10
                # 设置一个集合把练习的结果保存进去，然后添加到正确的列表
                str_aggremate = {str(num1) + "+" + str(num2) + "=" + str(n)}
                right_aggremate.append(str_aggremate)
                self.sum_rights += 1
            else:
                print("计算结果：{}".format(errors[r.randint(0, len(errors) - 1)]))
                str_list = {str(num1) + "+" + str(num2) + "=" + str(n)}#同上
                error_aggremate.append(str_list)
                self.sum_errors += 1#答错题数加1
            end = t.perf_counter()  # 结束时间
            print("历史记录：{}".format(right_aggremate + error_aggremate))#把正确和错误的统计集合合在一起
            print("总成绩为：{}".format(self.score))
            print("答题次数：{} 答对题数：{} 答错题数：{}".format(self.sum_errors + self.sum_rights, self.sum_rights, self.sum_errors))
            print("尝试时间为：{}".format(round((end - start), 2)))  # 时间保留两位小数
            print("-" * 20)
            #答完一题的操作
            print("\r请选择是否继续,1表示继续", end="")
            n = int(input())
            if n == 1:
                return self.add_z()
            else:
                return 0
    #定义选择计算小数还是整数的函数
    def choose(self,n):
        self.n=n
        if n == 1:
            self.add_z()
        elif n == 2:
            self.add_x()
        else:
            print("EVENTEND")
            return 0

def main():
    print("\r请选择整数学习还小数学习，整数为1，小数为2：",end="")
    n=int(input())
    s=sum_num()#初始化一个对象
    s.choose(n)#调用类的选择函数
#文件载入时即可运行
if __name__ == "__main__":
    msg = main()
    # print(msg)



